package common

import (
	"github.com/axgle/mahonia"
	"log"
	"os/exec"
	"regexp"
	"runtime"
	"strings"
)

//agent配置
type ClientConfig struct {
	Cycle  int           //信息传输频率  分钟
	UPD    bool          //是否记录UDP请求
	LAN    bool          //是否本地网络请求
	Mode   string        //模式
	Filter struct {
		File    []string //文件hash 文件名
		IP      []string //IP地址
		Process []string //进程名 参数
	}                    //直接过滤不回传的规则
	MonitorPath []string //监控目录列表
	Lasttime    string   //最后一条登录日志时间
}

//计算机信息结构
type ComputerInfo struct {
	IP       string   //IP地址
	System   string   //操作系统
	Hostname string   //计算机名
	Type     string   //服务器类型
	Path     []string //Web目录
}

var (
	Config       ClientConfig //配置信息
	LocalIP      string       //本机活跃IP
	ServerInfo   ComputerInfo //主机相关信息
	ServerIPList []string     //服务端列表
)

//执行系统命令
func CmdExec(cmd string) string {
	var c *exec.Cmd
	var data string
	system := runtime.GOOS
	argArray := strings.Split(cmd, " ")
	c = exec.Command(argArray[0], argArray[1:]...)
	out, _ := c.CombinedOutput()
	data = string(out)
	if "windows" == system {
		desc := mahonia.NewDecoder("gbk")
		data = desc.ConvertString(data)
	}
	return data
}

//判断是否存在列表中，如果regex为true，则进行正则匹配
func InArray(list []string, value string, regex bool) bool {
	for _, v := range list {
		if regex {
			if ok, err := regexp.Match(v, []byte(value)); ok {
				return true
			} else if err != nil {
				log.Println(err.Error())
			}
		} else {
			if value == v {
				return true
			}
		}
	}
	return false
}
